const config = require('./utils/config')
import Notify from './utils/Notify'

//app.js
App({
  $notify: null,
  RECEIVED_INVITATION: 1,
  RECEIVED_APPLICATION: 2,

  // 上传文件大小限制，单位字节
  uploadFileMaxSize: 11534336,

  // 根据用户的权限id生成权限标签list
  roleTagsBuild: function (roleId) {
    const userRole = config.USER_ROLE
    let roleList = [];
    if (!roleId) {
      roleList.push(userRole.ROLE_TOURIST.name);
      return roleList;
    }
    if ((roleId & userRole.ROLE_ADMIN.id) == userRole.ROLE_ADMIN.id) {
      roleList.push(userRole.ROLE_ADMIN.name);
    }
    if ((roleId & userRole.ROLE_STUDENT.id) == userRole.ROLE_STUDENT.id) {
      roleList.push(userRole.ROLE_STUDENT.name);
    }
    if ((roleId & userRole.ROLE_TUTOR.id) == userRole.ROLE_TUTOR.id) {
      roleList.push(userRole.ROLE_TUTOR.name);
    }
    if ((roleId & userRole.ROLE_SPONSOR.id) == userRole.ROLE_SPONSOR.id) {
      roleList.push(userRole.ROLE_SPONSOR.name);
    }
    return roleList;
  },

  // 检测用户是否为登陆状态
  checkedUserLoading(){
    if(!wx.getStorageSync('userInfo')){
      wx.showModal({
        title: '提示',
        content: '请授权登录！',
        showCancel: false,
        confirmText: '确定',
        confirmColor: '#3CC51F'
      });
      return false;
    }
    return true;
  },

  // 请求失败回调
  failFun: function (res) {
    wx.hideLoading();
    if (!res) {
      wx.showModal({
        title: '出现错误',
        content: '未知异常',
        showCancel: false
      });
    }
    if (res.data && res.data.data && res.data.data.message) {
      wx.showModal({
        title: '出现错误',
        content: res.data.data.message,
        showCancel: false
      });
    } else if (res.data && res.data.message) {
      wx.showModal({
        title: '出现错误',
        content: res.data.message,
        showCancel: false
      });
    } else if (res.message) {
      wx.showModal({
        title: '出现错误',
        content: res.message,
        showCancel: false
      });
    } else {
      wx.showModal({
        title: '出现错误',
        content: '未知异常',
        showCancel: false
      });
    }
  },

  // 无论请求成功与否，都会回调这个函数
  completeFun: function (e) {
    wx.hideLoading();
  },

  onLaunch: function () {
    // 展示本地存储能力
    // var logs = wx.getStorageSync('logs') || []
    // logs.unshift(Date.now())
    // wx.setStorageSync('logs', logs)

    // 获得系统信息
    wx.getSystemInfo({
      success: e => {
        this.globalData.StatusBar = e.statusBarHeight;
        let capsule = wx.getMenuButtonBoundingClientRect();
        if (capsule) {
          this.globalData.Custom = capsule;
          this.globalData.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight;
        } else {
          this.globalData.CustomBar = e.statusBarHeight + 50;
        }
      }
    })

    // 获取小程序更新机制兼容
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager()
      updateManager.onCheckForUpdate(function (res) {
        // 请求完新版本信息的回调
        if (res.hasUpdate) {
          updateManager.onUpdateReady(function () {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好，是否重启应用？',
              success: function (res) {
                if (res.confirm) {
                  // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                  updateManager.applyUpdate()
                }
              }
            })
          })
          updateManager.onUpdateFailed(function () {
            // 新的版本下载失败
            wx.showModal({
              title: '已经有新版本了哟~',
              content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~',
            })
          })
        }
      })
    } else {
      // 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
      })
    }

    // 创建websocket连接
    this.$notify = new Notify(this);
    if(wx.getStorageSync('token')){
      this.$notify.connectSocket();
    }
  },
  
  onShow (options) {
    if(wx.getStorageSync('token')){
      this.$notify.connectSocket();
    }
  },

  getWebSocketTask () {
    return this.$notify.socketTask;
  },

  globalData: {
    userInfo: null,
    skin: null,
    roleFlag: false,
    colorTheme: 'cyan',
    colorBackground: '#ffffff'
  }
})